#

#

Elo Touch Solutions Inc., 1033 McCarthy Blvd, Milpitas, CA 95035

This document includes the followings:

Elo TouchSystems Driver User Manual

Elo Software Design Guide

> ### Elo Software Design Guide

> ### Introduction

> ### Get Raw and Calibrated Touch Points from the Touchscreen

> ### Change Touchscreen Operation Modes

> ### Enable/Disable Touch Functionality

> ### Configure Sound During Touch

> ### Custom Alignment for Touchscreen Using Calibration API

> ### Define Touchscreen Boundary

> ### Retrieve Touchscreen Diagnostic Data

> ### Configure Cursor Edge Acceleration Feature

> ### Elo Device Interface Functions

> > ### Function Name: EloGetScreenCount
> > Function Name: EloEnableTouch
> > Function Name: EloIsTouchEnabled
> > Function Name: EloGetTouchPacket
> > Function Name: EloGetCalData
> > Function Name: EloSetCalData
> > Function Name: EloGetDiagnosticsData
> > Function Name: EloGetUAlignCounts
> > Function Name: EloGetClipRectangles
> > Function Name: EloSetClipRectangles
> > Function Name: EloGetFullScreenClipRectangle
> > Function Name: EloSetFullScreenClipRectangle
> > Function Name: EloGetEdgeAcceleration
> > Function Name: EloSetEdgeAcceleration
> > Function Name: EloSetDebugLevel
> > Function Name: EloGetDebugLevel
> > Function Name: EloEnableBeep
> > Function Name: EloIsBeepEnabled
> > Function Name: EloGetMonitorByWinMonNum
> > Function Name: EloGetMonitorByIndex
> > Function Name: EloGotoMonitor
> > Function Name: EloGetScreenByIndex
> > Function Name: EloGetMonitorIndexByWinMonNum
> > Function Name: EloGetMonitorCount
> > Function Name: EloGetAprParameters
> > Function Name: EloSetAprParameters
> > Function Name: EloGetAprFlashProgress
> > Function Name: EloGetApr700XSerialNumbers
> > Function Name: EloFlushControllerSmartsetBuffer
> > Function Name: EloGetControllerFWVersion
> > Function Name: EloSendSmartsetCommand
> > Function Name: EloGetSmartsetResponseStatus
> > Function Name: EloGetSmartsetResponse
> > Function Name: EloSmartsetTransaction
> > Function Name: EloClearAllGetPoint
> > Function Name: EloGetIRInternalSound
> > Function Name: EloSetIRInternalSound
> > Function Name: EloCopyDeviceParametersToGlobalKey
> > Function Name: EloCopyGlobalKeyToDeviceParameters
> > Function Name: EloApplyGlobalKeys
> > Function Name: EloStoreDevKeysToGlobal
> > Function Name: EloMakeBeep
> > Function Name: EloGetMultiTouch
> > Function Name: EloGetMaxTouch
> > Function Name: EloSetMaxTouch
> > Function Name: EloGetForceMouse
> > Function Name: EloSetForceMouse
> > Function Name: EloGetMouseMode
> > Function Name: EloSetMouseMode
> > Function Name: EloAcquireSmartsetLock
> > Function Name: EloReleaseSmartsetLock

> ### Interface Data Structures

> > ### Structure Name: SCREEN
> > Structure Name: MONITOR
> > Structure Name: ELO_GETTOUCHPOINTS
> > Structure Name: ELO_CALDATA
> > Structure Name: ELO_CLIPPING_MODE
> > Structure Name: TOUCH
> > Structure Name: MT_TOUCH
> > Structure Name: ClippingBounds
> > Structure Name: ELO_DIAGNOSTICS
> > Structure Name: ELO_GETTOUCHPOINTS
> > Structure Name: ELO_CLIPPING_MODE
> > Structure Name: ELO_FULL_SCREEN_CLIPPING
> > Structure Name: AccelBound
> > Structure Name: ACCELDATA
> > Structure Name: dbgLevel
> > Structure Name: SMARTSET_PKT
> > Structure Name: ELO_GET_SERIAL_NUMBERS
> > Structure Name: SPAN_MODE
> > Constants: CONTRL_STAT
> > Constants: TOUCHSCREEN_MODE
> > Constants: VrtlBoundMode
> > Constants: GETPOINTS_CODE
> > Constants: GETPOINTS_TRANSLATION
> > Constants: TOUCH_STATUS
> > Constants: MM_ERROR_CODE

> ##

> ## Contacting Elo

> ### Americas

> > #### North America

> > #### Latin America

> ### Asia-Pacific

> ### Europe (including Africa/Middle East)

> Elo Software Design Guide

> ## Introduction

> Elo SDK provides programmers with APIs for communication with the Elo Serial and USB drivers. The following functionalities are available for programming:

> ### Get Raw and Calibrated Touch Points from the Touchscreen

> > Gets touch data from the controller. This data can be retrieved in raw Elo coordinates or translated windows coordinate format. To get data use EloGetTouchPacket. This call may block depending on the flags used for the type of data expected.

> > EloGetTouchPacket

> ### Change Touchscreen Operation Modes

> Touchscreen operates in the following modes: Click On Touch: Click on touch immediately sends a mouse down/up message at the point of touch on the touchscreen. The user's finger must be removed from the touchscreen before a new touch at any location will be recognized. The cursor or selected objects CANNOT be "dragged" on the screen in this mode. Click On Release: At the time of release (untouch), a mouse down/up message is sent at the point that the screen was last touched. Dragging across objects on the screen will not highlight or select them unless untouch occurs when the touch is over the object. (Drag and Double-click) Mouse Emulation: Sends a mouse/touch down message at the point of contact. Selects an object if it was at the initial point of contact. Drags a selected object on the screen. Sends a mouse/touch up message at the point of untouch. Double-clicks on an object when the screen is touched twice in succession at the same location. These are the same as the touch modes in the Elo Control Panel. You may get or change the operation mode using the calls listed below: EloGetMouseMode EloSetMouseMode

> ### Enable/Disable Touch Functionality

The Touchscreen can be enabled to report touch data to the Windows system or disabled not to report any touch data. EloEnableTouch

### Configure Sound During Touch

Every complete touch is indicated by a beep from the system. Touchscreen must be calibrated before using this functionality. The frequency, time, and beep are configurable. EloMakeBeep

### Save Alignment for Touchscreen Using Calibration API

Elo provides a standard calibration utility for video alignment. The CALIBRATION is used to convert touches from the Elo coordinate system to Windows virtual coordinate system. The driver uses the following equation to convert a raw touch coordinate point from the Elo coordinate system to the Windows screen coordinate system. The calibration equation is Xcal = a + m*Xuncal, where, Xuncal, is in the Elo coordinate system Xcal, is in the Windows coordinate system m = nScrDx / nEloDx "a", is the X offset value entry nScrDx = distance between targets in the Windows virtual coordinates nEloDx = distance between targets in the Elo coordinates. This is especially useful if you want to save the calibration over the network or some other place, and later configure the touchscreen using one common set of data. To get the current calibration data from the driver, use EloGetCalData. For changing the calibration data use EloSetCalData . EloGetCalData EloSetCalData

### Define Touchscreen Boundary

Touchscreen boundary defines the bounding rectangle for the touchscreen on the Windows virtual desktop. This allows / prohibits touch on one monitor from being propagated to the corresponding monitor. The touchscreen must be calibrated before using this functionality. EloGetFullScreenClipRectangle EloSetFullScreenClipRectanble

### Retrieve Touchscreen Diagnostic Data

Diagnostic information for the touchscreen can be retrieved using EloGetDiagnosticsData. This information is also displayed in the Elo Control panel>Properties tab. EloGetDiagnosticData

### Configure Cursor Edge Acceleration Feature

Touching towards the edge of the touchscreen can be difficult at times. This feature allows the cursor to be accelerated towards the screen's edges. The touchscreen must be calibrated before using this functionality. EloGetEdgeAccel EloSetEdgeAccel

> ## Elo Device Interface Functions

### Function Name: EloGetScreenCount

int EloGetScreenCount( )

Parameters:
None.

Return Values: Returns the number of touchscreens attached to the system.

Remarks:

Maximum of 32 touchscreens are supported.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloEnableTouch

bool EloEnableTouch(int nScreenIndex, BOOL bEnableTouch )

Parameters:
nScreenIndex [in]: 0 based touch screen number.
bEnableTouch [in]: TRUE enables Touch. FALSE disables Touch..

Return Values: Returns TRUE if successful, otherwise FALSE.

Remarks:

Maximum of 32 touchscreens are supported.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloIsTouchEnabled

bool EloIsTouchEnabled(int nScreenIndex)

Parameters:
nScreenIndex [in]: 0 based touch screen number.
Return Values: Returns TRUE if Touch is enabled, otherwise FALSE.

Remarks:

Maximum of 32 touchscreens are supported.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloGetTouchPacket

int EloGetTouchPacket (int nScreenIndex, int *x, int *y, int *z, int *touch_status)

Parameters:
nScreenIndex [in]: 0 based touch screen number.

x [out]: If TRUE, the coordinates are returned translated for the Windows coordinate system. If FALSE, raw coordinate data are returned.

y [out]: If TRUE, the coordinates are returned translated for the Windows coordinate system. If FALSE, raw coordinate data are returned.

Z [out]: 0 – 255 values are dependent of screen technology.

Touch_status [out]: This returns the touch status at the time of Touch as follows, InitialTouch =1, StreamTouch =2 and UnTouch =4

Return Values: Returns 1 if successful, otherwise return 0

Remarks:
This call will not return until the user touches the screen on next valid Touch..

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloGetCalData

bool EloGetCalData (int nScreenIndex, ELO_CALDATA * pCalData)

Parameters:

nScreenIndex [in]: 0 based touchscreen number.
pCalData [out]: Pointer to ELO_CALDATA structure to receive the calibration data. Please see the structure definition section for ELO_CALDATA.

Return Values: Returns TRUE if successful, otherwise FALSE.

Remarks:
Retrieves the calibration data for the specified touchscreen.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloSetCalData

### Function Name: EloSetCalData

bool EloSetCalData (int nScreenIndex, ELO_CALDATA * pCalData)

Parameters:

nScreenIndex [in]: 0 based touchscreen number.
pCalData [in]: Pointer to ELO_CALDATA structure which stores the calibration data for the touchscreen. Please see the structure definition section for ELO_CALDATA.

Return Values: Returns TRUE if successful, otherwise FALSE.

Remarks:
Sets the calibration data for the specified touchscreen.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloGetCalData

### Function Name: EloGetDiagnosticsData

DWORD EloGetDiagnosticsData(int nScreenIndex, ELO_DIAGNOSTIC * pDiag)

Parameters:

nScreenIndex [in]: 0 based touchscreen number.
pDiag [out]: Pointer to ELO_DIAGNOSTIC structure to receive the diagnostics for the touchscreen. Please see the structure definition section for ELO_DIAGNOSTIC.

Return Values: Returns MMErrorSuccess if the call succeeds, otherwise it returns an error code or GetLastError(). See MM_ERROR_CODE section for list of error values.

Remarks:
Gets the diagnostics for the specified touchscreen. This information is also displayed in the Elo Control panel>Touch Screen Properties Button.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also: EloGetScreenByIndex

### Function Name: EloGetUAlignCounts

int EloGetUAlignCounts(int nScreenIndex, int * u1_cycles, int* u2_cycles)

Parameters:

nScreenIndex [in]: 0 based touchscreen number.
u1_cycles [out]:

u2_cycles [out]:

Return Values: Returns the number of combined UAlign cycles

Remarks:

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloGetClipRectangles

int EloGetClipRectangles(int nScreenIndex, ELO_CLIPPING_MODE *pClipMode)

Parameters:

nScreenIndex [in]: 0 based touchscreen number.
pClipMode [out]: Pointer to ELO_CLIPPING_MODE structure containing clipping boundary data in pixels. Please see the structure definition section for ELO_CLIPPING_MODE.

Return Values: Returns TRUE if successful, otherwise FALSE.

Remarks:
Gets the clipping bounding rectangle and bounding mode for the specified touchscreen.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloSetClipRectangles

### Function Name: EloSetClipRectangles

int EloSetClipRectangles(int nScreenIndex, ELO_CLIPPING_MODE *pClipMode)

Parameters:

nScreenIndex [in]: 0 based touchscreen number.
pClipMode [in]: Pointer to ELO_CLIPPING_MODE structure containing clipping boundary data in pixels. Please see the structure definition section for ELO_CLIPPING_MODE.

Return Values: Returns TRUE if successful, otherwise FALSE.

Remarks:
Sets the clipping bounding rectangle and bounding mode for the specified touchscreen.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloGetClipRectangles

### Function Name: EloGetFullScreenClipRectangle

int EloGetFullScreenClipRectangle(int nScreenIndex, ELO_FULL_SCREEN_CLIPPING_MODE *pFullScreenClipMode)

Parameters:

nScreenIndex [in]: 0 based touchscreen number.
pFullScreenClipMode [out]: Pointer to ELO_FULL_SCREEN_CLIPPING_MODE structure containing full screen clip boundary data in pixels. Please see the structure definition section for ELO_FULL_SCREEN_CLIPPING_MODE.

Return Values: Returns TRUE if successful, otherwise FALSE.

Remarks:
Gets the full screen clip bounding rectangle and bounding mode for the specified touchscreen.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloSetFullScreenClipRectangle

### Function Name: EloSetFullScreenClipRectangle

int EloSetFullScreenClipRectangle(int nScreenIndex, ELO_FULL_SCREEN_CLIPPING_MODE * pFullScreenClipMode)

Parameters:

nScreenIndex [in]: 0 based touchscreen number.
pFullScreenClipMode [in]: Pointer to ELO_FULL_SCREEN_CLIPPING_MODE structure containing full screen clip boundary data in pixels. Please see the structure definition section for ELO_FULL_SCREEN_CLIPPING_MODE.

Return Values: Returns TRUE if successful, otherwise FALSE.

Remarks:
Sets the full screen clip bounding rectangle and bounding mode for the specified touchscreen.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloGetFullScreenClipRectangle

### Function Name: EloGetEdgeAcceleration

int EloGetEdgeAcceleration(int nScreenIndex, int w_now, int h_now, ACCELDATA *pAccel)

Parameters:

nScreenIndex [in]: 0 based touchscreen number.

w_now [in]: The x-coordinate of the lower-right corner of the rectangle .

h_now[in]: The y-coordinate of the lower-right corner of the rectangle.
pAccel [out]: Pointer to ACCELDATA structure to receive the edge acceleration data for the touchscreen. Please see the structure definition section for ACCELDATA

Return Values: Returns TRUE if the call succeeds, otherwise FALSE.

Remarks:
Gets the edge acceleration boundary and acceleration value for the given touchscreen.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also: EloSetEdgeAccel

### Function Name: EloSetEdgeAcceleration

int EloSetEdgeAcceleration(int nScreenIndex, int w_now, int h_now, ACCELDATA *pAccel)

Parameters:

nScreenIndex [in]: 0 based touchscreen number.

w_now [in]: The x-coordinate of the lower-right corner of the rectangle .

h_now[in]: The y-coordinate of the lower-right corner of the rectangle.
pAccel [in]: Pointer to ACCELDATA structure to containing the edge acceleration data for the touchscreen. Please see the structure definition section for ACCELDATA.

Return Values: Returns TRUE if the call succeeds, otherwise FALSE.

Remarks:
Sets the edge acceleration boundary and acceleration scale for the given touchscreen.

Requirements:
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also: EloGetEdgeAccel

### Function Name: EloSetDebugLevel

bool EloSetDebugLevel (int nScreenIndex, ULONG ulDbgLevels)

Parameters:
ulDbgLevels [in]: debug level any combination of the debug level macro. Please see the structure definition section for debugLevel.

nScreenIndex [in]: 0 based touchscreen number.

Return Values: Returns TRUE if the call succeeds, otherwise FALSE.

Remarks:
Set viewable trace output of debug level in debug view.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloGetDebugLevel

### Function Name: EloGetDebugLevel

DWORD EloGetDebugLevel (int nScreenIndex)

Parameters:
nScreenIndex [in]: 0 based touchscreen number.

Return Values: Returns current combination of debug level flags (see debugLevel). If failed, returns -1

Remarks:
Get viewable trace output of debug level in debug view.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloSetDebugLevel

### Function Name: EloEnableBeep

bool EloEnableBeep(int nBeepMode )

Parameters:
nBeepNode [in]: 0=No Sound, 1=Motherboard Beeper, 2=External Speaker 3=MotherBoard & External Speaker

Return Values: Returns TRUE if the call succeeds, otherwise FALSE.

Remarks:

This enables the beep mode.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloIsBeepEnabled

int EloIsBeepEnabled()

Parameters:
none.
Return Values: Returns beep mode. 0=No Sound, 1=Motherboard Beeper, 2=External Speaker 3=MotherBoard & External Speaker

Remarks:

Retrieves the beep mode

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloGetMonitorByWinMonNum

MONITOR * EloGetMonitorByWinMonNum(int nWinMonNum)

Parameters:
nWinMonNum [in]: 1 based Windows monitor number.
Return Values: Returns a pointer to MONITOR struct if the call succeeds, otherwise NULL. Please see the structure definition section for MONITOR.

Remarks:

Retrieves pointer from the Monitor struct by the given Windows monitor number (win_num)

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloGetMonitorByIndex

MONITOR * EloGetMonitorByIndex(int nMonitoIndex)

Parameters:
nMonitoIndex [in]: 0 based Windows monitor index.
Return Values: Returns a pointer to MONITOR struct if the call succeeds, otherwise NULL. Please see the structure definition section for MONITOR.

Remarks:

Retrieves pointer from the Monitor struct by the given monitor index

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloGotoMonitor

void EloGetMonitorByIndex(HWND hWnd, int nMonitoIndex)

Parameters:

hWnd [in]: Windows Handle to the desired monitor.
nMonitoIndex [in]: 0 based Windows monitor index.
Return Values: none.

Remarks:

Screen focus moves to the specified monitor.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloGetScreenByIndex

SCREEN * EloGetScreenByIndex(int nScreenIndex)

Parameters:
nScreenIndex [in]: 0 based screen index.
Return Values: Returns a pointer to SCREEN struct if the call succeeds, otherwise NULL. Please see the structure definition section for SCREEN.

Remarks:

Retrieves pointer from the SCREEN struct by the given screen index

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloGetMonitorIndexByWinMonNum

int EloGetMonitorIndexByWinMonNum(int nWinMonNum)

Parameters:
nWinMonNum [in]: 0 based Windows monitor index.
Return Values: Returns monitor index by providing win_num.

Remarks:

If the mapped monitor index is not found, returns -1.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloGetMonitorCount

int EloGetMonitorCount()

Parameters:
None.
Return Values: Returns the monitor number(s) that are attached.

Remarks:

None.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloGetAprParameters

int EloGetAprParameters(int nsScreeenIndex, int * pnParameters, int nParameterCount)

Parameters:
nScreenIndex [in]: 0 based screen index.

pnParameters[in/out]: Int array is filled with pulse touch parameters

nParameterCount [in]: The size of nParameters array
Return Values: Returns the number of tracker parameters used.

Remarks:

If provided nScreenIndex exceeds the number of screen count, return -1. If no parameters are found, returns zero.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloSetAprParameters

### Function Name: EloSetAprParameters

bool EloSetAprParameters(int nsScreeenIndex, int * pnParameters, int nParameterCount)

Parameters:
nScreenIndex [in]: 0 based screen index.

pnParameters[in/out]: Int array is filled with pulse touch parameters.

nParameterCount [in]: The size of nParameters array
Return Values: Returns true if the call succeeds, otherwise false.

Remarks:

If the provided nScreenIndex exceeds the number of screen count, return false. If no parameters are found, returns zero.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloGetAprParameters

### Function Name: EloGetAprFlashProgress

int EloGetAprFlashProgress(int nsScreeenIndex, int * cur_page)

Parameters:
nScreenIndex [in]: 0 based screen index.

Cur_page [out]: current page.
Return Values: Returns total page if the call succeeds, otherwise -1.

Remarks:

Used to get the progress information for downloading the Pulse Touch calibration data

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloGetApr700XSerialNumbers

bool EloGetApr700XSerialNumbers(int nsScreeenIndex, ELO_GET_SERIAL_NUMBERS * pSN)

Parameters:
nScreenIndex [in]: 0 based screen index.

pSN [out]: Returns a pointer to ELO_GET_SERIAL_NUMBERS struct.
Return Values: Returns true if the call succeeds, otherwise false.

Remarks:

Returns the Serial Number of Pulse Touch 700X in the parameter.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloFlushControllerSmartsetBuffer

bool EloFlushControllerSmartsetBuffer(int nsScreeenIndex)

Parameters:
nScreenIndex [in]: 0 based screen index.
Return Values: Returns true if the call succeeds, otherwise false.

Remarks:

Flushes the controller buffer of a specified screen from the screen index.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloGetControllerFWVersion

bool EloGetControllerFWVersion(int nsScreeenIndex, TCHAR *ver, size_t nLen)

Parameters:
nScreenIndex [in]: 0 based screen index.

Ver[in/out]: Returns firmware version.

nLen[in]: Size of the string buffer.
Return Values: Returns true if the call succeeds, otherwise false.

Remarks:

Gets the controller firmware version from the parameter.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloSendSmartsetCommand

int EloSendSmartsetCommand (PSMARTSETDATA* pSmartsetData)

Parameters:
pSmartsetData [in]: Pointer to PSMARTSETDATA structure specifying the target Elo Touchscreen (member name: "ScreenNumber") and Smartset command to send. Please see the structure definition section for PSMARTSETDATA.

Return Values: Returns EloSuccess if the call succeeds, otherwise it will return an error code. See MM_ERROR_CODE section for a list of the error values.

Remarks:
Sending Smartset command to an Elo Touchscreen controller.

Requirements:
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also: MM_ERROR_CODE, EloSendSmartsetResponse, EloGetSmartsetReponseStatus,

### Function Name: EloGetSmartsetResponseStatus

int EloGetSmartsetResponseStatus (PSMARTSETDATA * pSmartsetData)

Parameters:
pSmartsetData [in/out]: Pointer to SMARTSETDATA structure specifying the target Elo Touchscreen (identified by the structure member, "ScreenNumber"). Please see the structure definition section for PSMARTSETDATA.

Return Values: Returns EloSuccess if the call succeeds, otherwise it will return an error code. See MM_ERROR_CODE section for a list of the error values.

Remarks:
Checks if a previous call to EloSendSmartsetCommand was successful then gets the total number of responses (member name, "Response") from the specified controller identified by theElo Touchscreen number.

Highly recommend to use EloSmartSetTransaction since it would eliminate the thread locking mechanism and re-trial in one function. This will reduce debugging issues when dealing with complex smartset commands.

Requirements:
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also: MM_ERROR_CODE, EloSendSmartsetCommand, EloGetSmartsetResponse.

### Function Name: EloGetSmartsetResponse

int EloGetSmartsetResponse (PSMARTSETDATA * pSmartsetData)

Parameters:
pSmartsetData [in/out]: Pointer to SMARTSETDATA structure retrieving Smartset response from an Elo Touchscreen (identified by member: "ScreenNumber"). Please see structure definition section for PSMARTSETDATA.

Return Values: Returns EloSuccess if the call succeeds, it returns an error code otherwise. See MM_ERROR_CODE section for list of error values.

Remarks:
Retrieves one Smartset response. To get all responses, this function must be called multiple times based on the value of "PSMARTSETDATA.Response" returned from the previous call to EloGetSmartsetResponseStatus.

Highly recommend to use EloSmartSetTransaction since it would eliminate the thread locking mechanism and re-trial in one function. This will reduce debugging issues when dealing with complex smartset commands.

Requirements:
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also: MM_ERROR_CODE, EloSendSmartsetCommand, EloGetSmartsetReponseStatus.

### Function Name: EloSmartsetTransaction

BOOL EloSmartsetTransaction (PSMARTSETDATA * pSS, SMARTSET_PKT* pSSPACKET, int nNumPkts, int* pnRespPkts, int nDelay)

Parameters:
pSS [in]: Pointer to SMARTSETDATA structure specifying the target Elo Touchscreen (member name: "ScreenNumber") and Smartset command to be sent. Please see structure definition section for PSMARTSETDATA.

pSSPACKET [out]: Pointer to SMARTSET_PKT structure returning the array of the Smartset response.

nNumPkts [in]: Size of SMARTSET_PKT.

pnRespPkts [out]: Size of valid Smartset response.

nDelay [in]: Interval time between the Smartset command being sent.

Return Values: If returns is TRUE, the data is retrieved. If FALSE, the data is not retrieved.

Remarks:
Sending a Smartset command to an Elo Touchscreen controller and retrieving the Smartset response. To get all responses, sufficient array size has to be passed.

Requirements:
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also: EloSendSmartsetCommand, EloGetSmartsetResponse, EloGetSmartsetReponseStatus.

### Function Name: EloClearAllGetPoint

bool EloClearAllGetPoint( )

Parameters:
noen.

Return Values: Returns true if the call succeeds, otherwise false.

Remarks:

Clears all the get point blocking calls.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloGetIRInternalSound

bool EloGetIRInternalSound(int nScreenIndex, UCHAR &State, DWORD &Freq, DWORD &Dura )

Parameters:
nScreenIndex [in]: 0 based screen index.
State [in/out]: State = 1 means turn on beep, State = 0 means disable beep.

Freq[in/out]: Returns the IR device internal beep frequency

Dura[in/out]: Returns the IR device internal beep duration

Return Values: Returns true if the call succeeds, otherwise false.

Remarks:

Retrieves the IR device internal beep frequency and duration in parameters.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloSetIRInternalSound

### Function Name: EloSetIRInternalSound

bool EloSetIRInternalSound(int nScreenIndex, UCHAR State, DWORD Freq, DWORD Dura )

Parameters:
nScreenIndex [in]: 0 based screen index.
State [in]: State = 1 means turn on beep, State = 0 means disable beep.

Freq[in]: Returns IR device internal beep frequency

Dura[in]: Returns IR device internal beep duration

Return Values: Returns true if the call succeeds, or false.

Remarks:

Set IR device internal beep frequency and duration..

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloGetIRInternalSound

### Function Name: EloCopyDeviceParametersToGlobalKey

bool EloCopyDeviceParametersToGlobalKey(int nScreenIndex)

Parameters:
nScreenIndex [in]: 0 based screen index.

Return Values: Returns true if the call succeeds, otherwise false.

Remarks:

Copies the specified device's registry keys by nScreenIndex to be stored in the Global registry area

(System\\CurrentControlSet\\Services\\EloTouchscreen)

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloCopyGlobalKeyToDeviceParameters, EloApplyGlobalKeys, EloStoreDevKeysToGlobal

### Function Name: EloCopyGlobalKeyToDeviceParameters

bool EloCopyGlobalKeyToDeviceParameters (int nScreenIndex)

Parameters:
nScreenIndex [in]: 0 based screen index.

Return Values: Returns true if the call succeeds, otherwise false.

Remarks:

Copies the global registry keys to the specifed device's registry keys by nScreenIndex

(System\\CurrentControlSet\\Services\\EloTouchscreen)

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloCopyDeviceParametersToGlobalKey, EloApplyGlobalKeys, EloStoreDevKeysToGlobal

### Function Name: EloApplyGlobalKeys

bool EloApplyGlobalKey (int nScreenIndex)

Parameters:
nScreenIndex [in]: 0 based screen index.

Return Values: Returns true if the call succeeds, otherwise false.

Remarks:

Copies the global registry keys to the specified device by nScreenIndex by driver IO control.

(System\\CurrentControlSet\\Services\\EloTouchscreen)

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloCopyDeviceParametersToGlobalKey, EloCopyGlobalKeyToDeviceParameters, EloStoreDevKeysToGlobal

### Function Name: EloStoreDevKeysToGlobal

bool EloStoreDevKeysToGlobal (int nScreenIndex)

Parameters:
nScreenIndex [in]: 0 based screen index.

Return Values: Returns true if the call succeeds, otherwise false.

Remarks:

Stores the device keys specified by nScreenIndex to the global registry area by driver IO control.

(System\\CurrentControlSet\\Services\\EloTouchscreen)

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloCopyDeviceParametersToGlobalKey, EloCopyGlobalKeyToDeviceParameters, EloApplyGlobalKey

### Function Name: EloMakeBeep

bool EloMakeBeep (unsigned int frequency, unsigned int duration)

Parameters:
frequency [in]: beep frequency [500 Hz - 4000 Hz].

duration [in]: beep duration [20 ms - 500 ms]

Return Values: Returns true if the call succeeds, otherwise false.

Remarks:
If the motherboard supports onboard beep, this will generate a beep after a touch event is detected.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

### Function Name: EloGetMultiTouch

bool EloGetMultiTouch (int nScreenIndex, MT_TOUCH * pMtTouch)

Parameters:
nScreenIndex [in]: 0 based screen index.

pMtTouch [in/out]: Returns a pointer to MT_TOUCH struct. Please see the structure definition section for MT_TOUCH.

Return Values: Returns true if the call succeeds, otherwise false.

Remarks:
Returns the Maximum number of supported touch 10 in a device and EloSetMaxTouch is 10. Retrieve up to 10 touches at a time.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloGetForceMouse, EloSetForceMouse, EloSetMaxTouch, EloGetMaxTouch

### Function Name: EloGetMaxTouch

bool EloGetMaxTouch (int nScreenIndex, ULONG &nTouch)

Parameters:
nScreenIndex [in]: 0 based screen index.

nTouch [in/out]: Returns maximum number of touch [0-10] available in the device given by nScreenIndex.

Return Values: Returns true if the call succeeds, otherwise false.

Remarks:
Get maximum touch available in the device given by nScreenIndex.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloGetForceMouse, EloSetForceMouse, EloSetMaxTouch

### Function Name: EloSetMaxTouch

bool EloGetMaxTouch (int nScreenIndex, ULONG nTouch)

Parameters:
nScreenIndex [in]: 0 based screen index.

nTouch [in]: Sets maximum number of touch [0-10] available in the device given by nScreenIndex.

Return Values: Returns true if the call succeeds, otherwise false.

Remarks:
Sets maximum touch available in the device given by nScreenIndex.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloSetForceMouse, EloGetForceMouse, EloGetMaxTouch

### Function Name: EloGetForceMouse

bool EloGetForceMouse (int nScreenIndex, ULONG &lMouse)

Parameters:
nScreenIndex [in]: 0 based screen index.

lMouse [in]: 1 means currently mouse mode. 0 means touch mode.

Return Values: Returns true if the call succeeds, otherwise false.

Remarks:
Retrieves the current mouse mode by nScreenIndex.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloSetForceMouse

### Function Name: EloSetForceMouse

bool EloSetForceMouse (int nScreenIndex, ULONG lMouse)

Parameters:
nScreenIndex [in]: 0 based screen index.

lMouse [in]: 1 means currently mouse mode. 0 means touch mode.

Return Values: Returns true if the call succeeds, otherwise false.

Remarks:
Sets the mouse mode to the device given by nScreenIndex.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloGetForceMouse

### Function Name: EloGetMouseMode

int EloGetMouseMode (int nScreenIndex)

Parameters:

nScreenIndex [in]: 0 based touchscreen number.

Return Values: Returns the Touchscreen mode. Please see the Constant definition section for TOUCHSCREEN_MODE

Remarks:
Retrieves the touch mode (TOUCHSCREEN_MODE) for the specified touchscreen.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloSetMouseMode

### Function Name: EloSetMouseMode

bool EloSetMouseMode (int nScreenIndex, ULONG lMode)

Parameters:
nScreenIndex [in]: 0 based touchscreen number.

lMouse [in]: Touchscreen mode. Please see the Constant definition section for TOUCHSCREEN_MODE.

Return Values: Returns true if successful, otherwise false.

Remarks:
Sets the touch mode (TOUCHSCREEN_MODE) for the specified touchscreen to lMode.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloGetMouseMode

### Function Name: EloAcquireSmartsetLock

bool EloAquireSmartsetLock (int nScreenIndex, int nRetry)

Parameters:
nScreenIndex [in]: 0 based touchscreen number.

nRetry [in]: Set the number or trail.

Return Values: Returns true if successful, otherwise false.

Remarks:

Sets the thread safe lock mechanism; however, the controller is often busy from earlier tasks which can result in a slower response.

nRetry gives you enough time to let the earlier thread release the lock before processing the current one.

Highly recommend to use EloSmartsetTransaction instead.

EloSmartsetTransaction takes care of the thread locking mechanism inside the function.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloReleaseSmartsetLock

### Function Name: EloReleaseSmartsetLock

bool EloReleaseSmartsetLock (int nScreenIndex)

Parameters:
nScreenIndex [in]: 0 based touchscreen number.

Return Values: Returns true if successful, otherwise false.

Remarks:

Release the thread lock of the specified device by nScreenIndex.

Highly recommend to use EloSmartsetTransaction instead.

EloSmartsetTransaction takes care of the thread locking mechanism inside the function.

Requirements
Included in Version 6.30 and later.
Header: Declared in EloInterface.h; include EloInterface.h.
Library: Use EloMtApi.lib.

See Also EloAcquireSmartsetLock

> ## Interface Data Structures

### Structure Name: SCREEN

The SCREEN structure contains the diagnostics data for the touchscreen.

> > > typedef struct _SCREEN

> > > {

> > > > HANDLE hThread;

> > > > int nScreenIndex; // enum dev index

> > > > USHORT uVendorID; // HidD_GetAttributes(): HIDD_ATTRIBUTES.VendorID

> > > > USHORT uProductID; // HidD_GetAttributes(): HIDD_ATTRIBUTES.ProductID

> > > > USHORT uVersionNumber; // HidD_GetAttributes(): HIDD_ATTRIBUTES.VersionNumber == USB_DEVICE_DESCRIPTOR.bcdDevice from Elo USB and APR driver

> > > > wchar_t szDevicePath [MAX_PATH];

> > > > ACCELDATA accel_data;

> > > > ELO_CALDATA cal_data;

> > > > LONG lSmartSetToken; // SmartSet token returned by the driver when handling the SmartSet commands

> > > > DWORD dwSSTokenThreadId;// ID of the thread which is holding the SmartSet token

> > > > ELO_CLIPPING_MODE clip_mode; // defined in mmioctl.h

> > > > MONITOR* pMonitor; // pointer to the monitor item in MONITOR array in CMonitor

> > > > ELO_DIAGNOSTICS diag;

> > > } SCREEN, *PSCREEN;

Members

hThread: Thread handle used during calibration.

nScreenIndex: 0 based touch screen number.

uVendorID: HIDD_ATTRIBUTES.VendorID i.e. VID_04E7.

uProductID: HIDD_ATTRIBUTES.ProductID i.e. PID_0020

uVersionNumber: HIDD_ATTRIBUTES.VersionNumber USB_DDEVICE_DESCRIPTOR.bcdDevice from Elo USB and APR driver

szDevicePath: Devcie path

accel_data: Please see the structure definition section for ACCELDATA.

cal_data: Please see the structure definition section for ELO_CALDATA

lSmartSetToken: SmartSet token returned by the driver when handling SmartSet commands

dwSSTokenTHreadid: ID of the thread which is holding the SmartSet token

pMonitor: A pointer to MONITOR struct. Please see the structure definition section for MONITOR

diag: Most recently stored diagnostic resul t of the screen. Please see the structure definition section for ELO_DIAGNOSTIC.

### Structure Name: MONITOR

The MONITOR structure is used to define the array of touch monitor devices attached to the system.

> > > typedef struct MONITORS_TAG

> > > {

> > > > int win_num; // Windows monitor number

> > > > int x;

> > > > int y;

> > > > int width;

> > > > int height;

> > > > DWORD orientation;

> > > > DWORD edid; // Monitor serial number from EDID

> > > > HMONITOR hMon;

> > > > HANDLE hMappedPointerDevice;

> > > > wchar_t device_id [MAX_PATH];

> > > > SPAN_MODE span_mode;

> > > } MONITOR, *PMONITOR;

Members
win_num: Windows monitor number that appears in the screen resolution dialog of the Control Panel

x: X coordinate of the touch location.

y: Y coordinate of the touch location.

width: Screen width

height: Screen height

orientation: Screen orientation DMDO_270, DMDO_180, DMDO_90 and DMDO_DEFAULT

edid: Monitor serial number

hMon: Handle to the Monitor

hMappedPointerDevice: Handle to the mapped pointer device

device_id: Verndor ID i.e. VID_04E7

span_mode: Please see the constants definition for SPAN_MODE

### Structure Name: ELO_GETTOUCHP OINT

The ELO_GETTOUCHPOINT structure defines a touch coordinate.

> > > typedef struct _ELO_GETTOUCHPOINTS

> > > {

> > > > BOOL ValidFlag; // OUT-if TRUE, points are valid untouch points

> > > > GETPOINTS_TRANSLATION Translation;// OUT-if TRUE, points are translated

> > > > LONG XValue; // OUT- x value of touch

> > > > LONG YValue; // OUT- x value of touch

> > > > LONG ZValue; // OUT- Z value of touch

> > > > TOUCHPACKET Controller_Packet;

> > > > TOUCH_STATUS Status;

> > > > GETPOINTS_CODE GetPointsFlag; // IN - the blocked call returns data depending on this flag

> > > } ELO_GETTOUCHPOINTS, *PELO_GETTOUCHPOINTS;

Members

ValidFlag: Returns TRUE if untouch is valid, otherwise FALSE.

Translation: Please see the structure definition for GETPOINOTS_TRANSLATION

XValue: x co-ordinate for touch.

YValue: y co-ordinate for touch.

ZValue: z co-ordinate for touch.

Controller_Packet: Please see the structure definition for TOUCHPACKET

Status: Receives the touch status. Plea se see the constants definition for TOUCH_STATUS.

GetPointsFlag: Please see the constants definition for GETPOINTS_CODE

### Structure Name: ELO_CAL DATA

The CALIBRATION structure defines the calibration data used to convert touches from the Elo coordinate system to the Windows virtual coordinate system.

The driver uses the following equation to convert a raw touch coordinate point from the Elo coordinate system to the Windows screen coordinate system.
The calibration equation is:

Xcal = a + m*Xuncal,

where,
Xuncal, is in the Elo coordinate system
Xcal, is in the Windows coordinate system
m = nScrDx / nEloDx
"a", is the X offset value entry
nScrDx = distance between targets in Windows' virtual coordinates
nEloDx = distance between targets in Elo's coordinates.

> > > > typedef struct _EloCalData // IN Set calibrate data input buffer

> > > > {

> > > > LONG EloDx;

> > > > LONG ScrDx;

> > > > LONG X_Offset;

> > > > LONG EloDy;

> > > > LONG ScrDy;

> > > > LONG Y_Offset;

> > > > LONG EloDz;

> > > > LONG ScrDz;

> > > > LONG Z_Offset;

> > > > LONG xyswap;

> > > > ULONG WindowsMonitorNumber;

> > > > ULONG MonitorSerialNumber;

> > > > unsigned short Checksum;

> > > > int nScreenIndex;

> > > > // Support multiple screens for mouse collection

> > > > LONG xVirtScrSize;

> > > > LONG yVirtScrSize;

> > > > LONG xVirtScrCoord;

> > > > LONG yVirtScrCoord;

> > > > }ELO_CALDATA, *PELO_CALDATA;

Members

EloDx:

ScrDx:

X_Offset:

EloDy:

ScrDy:

Y_Offset:

EloDz:

ScrDz:

Z_Offset:

Data is required by calibration. Use the equation above to calculate these values.

xyswap: Specifies if the touchscreen is rotated 90 degrees or 270 degrees. Set to 1 if touchscreen is rotated 90 degrees or 270 degrees else set to 0.

WindowsMonitorNumber:

MonitorSerialNumber: Windows monitor numbers are 1 based.

Checksum: Screen width in pixels.

nScreenIndex: Screen height in pixels.

xMonLocn: Monitor location (X) for this monitor on the virtual desktop in pixels.

yMonLocn: Monitor location (Y) for this monitor on the virtual desktop in pixels.

xVirtScrSize: Width in pixels of the Windows virtual screen.

yVirtScrSize: Height in pixels of the Windows virtual screen.

xVirtScrCoord: Top left X coordinate of the Windows virtual screen.

yVirtScrCoord: Top left Y coordinate of the Windows virtual screen.

### Structure Name: ELO_CLIPPING_MODE

> > > typedef struct _ELO_CLIPPING_MODE

> > > {

> > > > VrtlBoundMode ClippingMode;

> > > > ULONG NumBounds;

> > > > ULONG ExclusionFlag;

> > > > ClippingBounds Bounds[MAX_BOUND];

> > > > int MonitorNumber;

> > > } ELO_CLIPPING_MODE, *PELO_CLIPPING_MODE;

Members
ClippingMode: Defines the touch bounding rectangle for the screen. See structure ClippingBounds. Please see the constant definition for VrtBoundMode.

ClippingMode: Defines the mode for the touchscreen boundary on the virtual desktop. Possible values are as follows:

0: Disable virtual desktop. Touch on all screens will be reflected on the primary monitor.
1: Enable virtual desktop. In this mode, no individual screen bounds are used for the monitor. Touches toward the edge may generate clicks on adjacent monitors.
2: Enable virtual desktop. Screen bounds are enabled for each monitor. Touches on the screen will always generate clicks on the associated monitor. A touch outside the bounding rectangle will cause the cursor to move to a point along the boundary that is nearest to the point of touch.
3: Enable virtual desktop. Screen bounds are enabled for each monitor. Touches on the screen always generate clicks on the associated monitor. Touches outside the bounding rectangle are not sent to the system.

NumBounds: The number of stored bounds.

ExclusionFlag: 0 means inside bound is touchable. 1 means bound area is untouchable.

Bounds: Please see the structure definition for ClippingBounds.

MonitorNumber: monitor index

### Structure Name: TOUCH

> > The TOUCH data structure defines the touch configuration parameters.

> > > typedef struct tagTouch

> > > {

> > > > TOUCH_STATUS status;

> > > > UCHAR id; // touch id: 0 or 1 representing the touch finger

> > > > USHORT x; // x of a touch point

> > > > USHORT y; // y of a touch point

> > > } TOUCH, *PTOUCH;

Members
status: Please see the constants definition of TOUCH_STATUS

id: Touch id representing the touch sequence of touch point

x: X distance in pixels. Touches outside this distance will generate quick touches.

y: Y distance in pixels. Touches outside this distance will generate quick touches.

###

### Structure Name: MT_TOUCH

> > The MT_TOUCH data structure defines the touch configuration parameters.

> > > typedef struct

> > > {

> > > > TOUCH touch [ELO_MT_MAX_COUNT]; // max number of touches (fingers)

> > > > int count; // actual touch count

> > > } MT_TOUCH, *PMT_TOUCH;

Members
touch: Please see the structure definition for TOUCH

count: Number of touches

### Structure Name: ClippingBounds

> > The ClippingBounds structure is used to define the bounding rectangle.

> > > typedef struct _ClippingBounds // IN Set calibrate data input buffer

> > > {

> > > > long X_Max;

> > > > long X_Min;

> > > > long Y_Max;

> > > > long Y_Min;

> > > > long Z_Max;

> > > > long Z_Min;

> > > } ClippingBounds, *PClippingBounds;

Members

X_Max: Specifies the X coordinate of the lower-right corner of the rectangle in pixels.
X_Min: Specifies the X coordinate of the upper-left corner of the rectangle in pixels.

Y_Max: Specifies the Y coordinate of the lower-right corner of the rectangle in pixels.

Y_Min: Specifies the Y coordinate of the upper-left corner of the rectangle in pixels.

Z_Max: Reserved.

Z_Min: Reserved.

### Structure Name: ELO_DIAGNOSTIC

> > The ELO_DIAGNOSTICS structure is used to define generic device information

> > > typedef struct _DIAGNOSTICS

> > > {

> > > > CONTRL_STAT ctrl_status; // OUT- Controller Status

> > > > ULONG HardwareHandShaking; // OUT-Hardware handshaking turned on /off

> > > > LONG BaudRate; // OUT- Baud rate of controler, 0 for bus

> > > > unsigned char crevminor; // OUT- controller rev minor number

> > > > unsigned char crevmajor; // OUT- controller rev major number

> > > > unsigned char trevminor; // OUT- Unused

> > > > unsigned char trevmajor; // OUT- Unused

> > > > unsigned char diagcodes[8]; // OUT- Diag codes ret from controller

> > > > unsigned char id[8]; // OUT- OEM ID string ret from controller

> > > > unsigned char cnt_id[8]; // OUT- Full Smartset controller ID packet

> > > > unsigned char driver_id[32]; // OUT- Driver ID

> > > > // add on fields from enum ioctl

> > > > ULONG uInterfaceType; // OUT- TOUCHSCREEN_TYPE_USB, TOUCHSCREEN_NT_SERIAL, ...

> > > > wchar_t PortFriendlyName [COMPORT_NAME_LENGTH]; // OUT- Used for serial touchscreens

> > > > wchar_t SerialNumber [SERIALNUMBER_NAME_LENGTH]; // OUT- ASCII 8-digit serial#

> > > > wchar_t wcUsbProductString [USB_PRODUCT_STRING_LENGTH];

> > > > // APR only

> > > > char szCalFileName [DATA_FILE_MAX_NAME];

> > > > int nCalFileVerMajor;

> > > > int nCalFileVerMinor;

> > > > char szSensorSN [SCF_HEADER_SERIAL_NUMBER_LENGTH];

> > > > // End APR only

> > > } ELO_DIAGNOSTICS , *PELO_DIAGNOSTICS ;

Members

ctrl_status: Please see the constants definition for CONTRL_STAT.

HardwareHandShaking: Non zero value is return hardware is handshaking. Hardware handshaking turned on /off

BaudRate: Serial communication speed.

crevminor: Minor revision of controller.

crevmajor: Major revision of controller.

trevminor: Trailing minor revision of controller.

trevmajor: Trailing major revision of controller.

diagcodes: The response received from the diagnostics smartest command sent to the controller.

cnt_id: Contains the response from the controller id smartest command to the controller.

driver_id: Driver identification / version string.

uInterfaceType: (TOUCHSCREEN_TYPE_USB 0x01) (TOUCHSCREEN_TYPE_SERIAL 0x02) (TOUCHSCREEN_TYPE_APR 0x03)

PortFriendlyName: Com port friendly name used for serial communication

SerialNumber: Controller serial number

wcUsbProductString: Touchscreen model name that appears in the Control Panel

szCalFileName: Calibration file name

nCalFileVerMajor: Calibration file major version number for Pulse Touch

nCalFileVerMinor: Calibration file minor version number for Pulse Touch

szSensorSN: Sensor serial number

### Structure Name: TOUCHPACKET

> > The TOUCHPACKET structure is used to define touch XYZ coordinates with TOUCH_STATUS

> > > typedef struct

> > > {

> > > > UCHAR T; // Leading 'T' for touch packet

> > > > UCHAR Status; // Touch status

> > > > SHORT X; // X value

> > > > SHORT Y; // Y value

> > > > SHORT Z; // Z value

> > > } TOUCHPACKET, *PTOUCHPACKET;

Members

T: The leading char for a smartset touch packet.

Status: Please see the constants definition for TOUCH_STATUS

X: X coordinate of a touch

Y: Y coordinate of a touch

Z: Z coordinate of a touch

### Structure Name: ELO_GETTOUCHPOINTS

> > The ELO_GETTOUCHPOINTS structure is used to define detailed touch point information (Example: Validity of touch or the type of touch that is of interest).

> > > typedef struct _ELO_GETTOUCHPOINTS

> > > {

> > > > BOOL ValidFlag; // OUT-if TRUE, points are valid untouch points

> > > > GETPOINTS_TRANSLATION Translation;// OUT-if TRUE, points are translated

> > > > LONG XValue; // OUT- x value of touch

> > > > LONG YValue; // OUT- x value of touch

> > > > LONG ZValue; // OUT- Z value of touch

> > > > TOUCHPACKET Controller_Packet;

> > > > TOUCH_STATUS Status;

> > > > GETPOINTS_CODE GetPointsFlag; // IN - the blocked call returns data depending on this flag

> > > } ELO_GETTOUCHPOINTS, *PELO_GETTOUCHPOINTS;

Members

ValidFlag: TRUE if Untouch is valid, otherwise FALSE.

Translation: Please see the structure definition for GETPOINTS_TRANSLATION

XValue: A touch point of x-coordinate value

YValue: A touch point of y-coordinate value

ZValue: A touch point of z-coordinate value

Controller_Packet: Please see the structure definition for TOUCHPACKET
Status: Please see the constants definition for TOUCH_STATUS
GetPointsFlag: Please see the constants definition for GETPOINTS_CODE

### Structure Name: ELO_CLIPPING_MODE

> > The ELO_CLIPPING_MODE structure is used to define the bounding rectangle.

> > > typedef struct _ELO_CLIPPING_MODE

> > > {

> > > > VrtlBoundMode ClippingMode;

> > > > ULONG NumBounds;

> > > > ULONG ExclusionFlag;

> > > > ClippingBounds Bounds[MAX_BOUND];

> > > > int MonitorNumber;

> > > } ELO_CLIPPING_MODE, *PELO_CLIPPING_MODE;

Members

ClippingMode: Please see the constants definition of VrtBoundMode

NumBounds: The number of bounds

ExclusionFlag: 0 means enclosed bound(s) become touchable zone(s) whereas 1 means enclosed bound(s) become untouchable zone(s)

Bounds: Defines the edge of the touchscreen acceleration bounds.

MonitorNumber: Monitor index

### Structure Name: ELO_FULL_SCREEN_CLIPPING

> > The ELO_FULL_SCREEN_CLIPPING structure is used to define the full screen clipping bounding rectangle.

> > > typedef struct _ELO_FULL_SCREEN_CLIPPING

> > > {

> > > > VrtlBoundMode ClippingMode;

> > > > ClippingBounds Bounds[MAX_BOUND];

> > > } ELO_FULL_SCREEN_CLIPPING, *PELO_FULL_SCREEN_CLIPPING;

Members

ClippingMode: Please see the constants definition of VrtBoundMode

Bounds: Defines the edge of the touchscreen acceleration bounds.

### Structure Name: AccelBounds

> > > The AccelBounds structure is used to define the bounding rectangle of the accelerating region.

> > > typedef struct _AccelBounds // IN Set calibrate data input buffer

> > > {

> > > > LONG X_Max;

> > > > LONG X_Min;

> > > > LONG Y_Max;

> > > > LONG Y_Min;

> > > > LONG Z_Max;

> > > > LONG Z_Min;

> > > } AccelBounds, *pAccelBonds;

Members

X_Max: Specifies the X coordinate of the lower-right corner of the rectangle in pixels.
X_Min: Specifies the X coordinate of the upper-left corner of the rectangle in pixels.

Y_Max: Specifies the Y coordinate of the lower-right corner of the rectangle in pixels.

Y_Min: Specifies the Y coordinate of the upper-left corner of the rectangle in pixels.

Z_Max: Reserved.
Z_Min: Reserved.

### Structure Name: ACCELDATA

> > > The EDGE_ACCEL structure is used to define the bounding rectangle.

> > > typedef struct _ACCELDATA

> > > {

> > > > ULONG Enable;

> > > > ULONG Scale;

> > > > AccelBounds Bounds[1];

> > > } ACCELDATA, *PACCELDATA;

Members
Enable: 0 disables acceleration, 1 enables acceleration.

Scale: The edge acceleration speed scale consist of three pre-determined values of 15 (slow), 20 (medium), and 25 (fast) in the defined bounds.

Bounds: Defines the edge of the touchscreen acceleration bounds. See the structure definition for ClippingBounds.

### Structure Name: dbgLevelMap

> > > struct dbgLevel

> > > {

> > > > TCHAR name [64];

> > > > unsigned long value;

> > > } dbgLevelMap[] =

> > > > { // From \Drivers\EloMtUsb\trace.h

> > > > { _T("DEBUG_LEVEL_ERROR"), 0x00000001 },

> > > > { _T("DEBUG_LEVEL_WARN"), 0x00000002 },

> > > > { _T("DEBUG_LEVEL_INIT"), 0x00000004 },

> > > > { _T("DEBUG_LEVEL_INIT_LOUD"), 0x00000008 },

> > > > { _T("DEBUG_LEVEL_TOUCHDATA"), 0x00000010 },

> > > > { _T("DEBUG_LEVEL_TOUCHDATA_LOUD"), 0x00000020 },

> > > > { _T("DEBUG_LEVEL_TOUCHSTATE"), 0x00000040 },

> > > > { _T("DEBUG_LEVEL_GETPOINT"), 0x00000080 },

> > > > { _T("DEBUG_LEVEL_PNP_POWER"), 0x00000100 },

> > > > { _T("DEBUG_LEVEL_PNP_POWER_LOUD"), 0x00000200 },

> > > > { _T("DEBUG_LEVEL_IOCTL"), 0x00000400 },

> > > > { _T("DEBUG_LEVEL_IOCTL_LOUD"), 0x00000800 },

> > > > { _T("DEBUG_LEVEL_SMARTSET"), 0x00001000 },

> > > > { _T("DEBUG_LEVEL_SMARTSET_LOUD"), 0x00002000 },

> > > > { _T("DEBUG_LEVEL_BEEP"), 0x00004000 },

> > > > { _T("DEBUG_LEVEL_RCOH"), 0x00008000 },

> > > > { _T("DEBUG_TRACK_IDLE"), 0x00010000 },

> > > > { _T("DEBUG_TRACK_TOUCH"), 0x00020000 },

> > > > { _T("DEBUG_TRACK_FSR"), 0x00040000 },

> > > > { _T("DEBUG_LEVEL_LOWSIG"), 0x00100000 },

> > > > { _T("DEBUG_LEVEL_TOUCHREJECT"), 0x00200000 },

> > > > { _T("DEBUG_LEVEL_TRACK_TOOLS_LOUD"), 0x00400000 },

> > > > { _T("DEBUG_LEVEL_MCHANNEL_DUMP"), 0x00800000 },

> > > > { _T("DEBUG_LEVEL_IOCTL_PAYLOAD"), 0x80000000 },

> > > };

Members
name: Debug level option name

value: The value of the unique bit flag which turns on a specific debug feature.

### Structure Name: SMARTSETDATA

The SMARTSETDATA structure is used to define the array of Smartset response.

> > > typedef struct _SmartsetData

> > > {

> > > > LONG ScreenNumber;

> > > > union

> > > > {

> > > > > char Command[8];

> > > > > unsigned short Response;

> > > > };

> > > } SMARTSETDATA, *PSMARTSETDATA;

Members

ScreenNumber: Screen Index
command: Contains the command/response to the controller.

### Structure Name: SMARTSET_PKT

The SMARTSET_PKT structure is used to define the array of Smartset response.

> > > typedef struct _SmartsetPkt

> > > {

> > > > unsigned char pkt[8];

> > > } SMARTSET_PKT;

Members
pkt: Contains the response to the smartest command to the controller.

### Structure Name: ELO_GET_SERIAL_NUMBERS

The ELO_GET_SERIAL_NUMBERS structure is used to define the USB/sensor serial number as well as the version of the calibration data in use.

> > > typedef struct _ELO_GET_SERIAL_NUMBERS

> > > {

> > > > WCHAR UsbSerialNumber[USB_SERIAL_NUMBER_LENGTH];

> > > > CHAR SensorSerialNumber[SCF_HEADER_SERIAL_NUMBER_LENGTH];

> > > > CHAR CalFileInUse[DATA_FILE_MAX_NAME];

> > > > UCHAR Diagnostics;

> > > > LONG CalFileMajorVerion;

> > > > LONG CalFileMinorVerion;

> > > } ELO_GET_SERIAL_NUMBERS, *PELO_GET_SERIAL_NUMBERS;

Members
UsbSerialNumber: USB serial number

SensorSerialNumber: Sensor serial number

CalFileInUse: Calibration file name

Diagnostics: Smartset respond of the diagnostic request ( the 'd' command )

CalFileMajorVersion: Calibration file major version

CalFileMinorVersion: Calibration file minor version

### Structure Name: SPAN_MODE

The SPAN_MODE structure is used to define the physical layout of the touch screens.

> > > typedef struct SPAN_MODE_TAG

> > > {

> > > > unsigned char row_index;

> > > > unsigned char col_index;

> > > > unsigned char tot_rows;

> > > > unsigned char tot_cols;

> > > } SPAN_MODE;

Members

row_index: Desktop monitor horizontal location index

col_index: Desktop monitor vertical location index

tot_rows: Total rows of monitors

tot_cols: Total columns of monitors

### Constants: CONTRL_STAT

> > > typedef enum _CONTRL_STAT // ctrl_status values

> > > {

> > > > CS_OK = 0,

> > > > CS_ConstantTouch,

> > > > CS_CanNotFindController,

> > > > CS_NoResponse,

> > > > CS_InvalidResponse,

> > > > CS_CanNotSetBaudRate,

> > > > CS_CommandNotSent,

> > > > CS_SystemError,

> > > > CS_InvalidCommPort,

> > > > CS_CommPortFailedOpen,

> > > > CS_CommPortCommandError,

> > > > CS_CommPortNoController,

> > > > CS_UndefinedController

> > > } CONTRL_STAT;

Values
CS_OK: Everything works fine.

CS_ConstantTouch: There is constant touch detected on the touchscreen.

CS_CanNotFindController: No controller found.

CS_NoResponse: No response from the controller.

CS_InvalidResponse: Incorrect response, maybe due to out of sync.

CS_CanNotSetBaudRate: Baud rate cannot be set.

CS_CommandNotSent: Smartset command cannot be sent to the controller.

CS_SystemError: System Error.

CS_InvalidCommPort: No touchscreen connected on the serial port specified.

CS_CommPortFailedOpen: Error opening the serial port.

CS_CommPortCommandError: Communication error.

CS_CommPortNoController: No controller.

CS_UndefinedController: Unidentified controller.

### Constants: TOUCHSCREEN_MODE

Valid TOUCHSCREEN_MODE for the touchscreen.

> > > #define MODE_CLICK_ON_TOUCH 0

> > > #define MODE_CLICK_ON_UNTOUCH 1

> > > #define MODE_MOUSE_EMULATION 6

Values

MODE_CLICK_ON_TOUCH : Click on touch immediately, upon touch, sends a mouse down/up message at the point of touch on the touchscreen. The user's finger must be removed from the touchscreen before a new touch at any location will be recognized. The cursor or selected objects CANNOT be "dragged" on the screen in this mode.

MODE_CLICK_ON_UNTOUCH: Click on release, upon release (untouch), sends a mouse down/up message at the point of the screen that was last touched. Dragging across objects on the screen will not highlight or select them unless untouch occurs over the object. (Drag and Double-click)

MODE_MOUSE_EMULATION: Sends a mouse down message at the point of contact. Selects an object if it was at the initial point of contact. Ability to drag a selected object on the screen. Sends a mouse up message at the point of untouch. Double-clicks on an object when the screen is touched twice in succession at the same location.

### Constants: VrtlBoundMode

Valid mode for VrtlBoundMode

> > > typedef enum

> > > {

> > > > enumVrtlDeskDisabled = 0, // no virtual desktop

> > > > enumVrtlNoBounds, // NO virtual desktop bounds, No Clipping, Cursor visible

> > > > enumVrtlBoundsClipped, // virtual desktop bounds enable, Clipping, Cursor moves at bounds

> > > > enumVrtlBoundsFreeze // virtual desktop bounds enable, Clipping, Cursor Freezes at bounds

> > > } VrtlBoundMode;

Values

enumVrtlDeskDisabled = 0: Disables virtual desktop. Touch on all screens will be reflected on the primary monitor.
enumVrtlNoBounds=1: Enables virtual desktop. In this mode, no individual screen bounds are used for the monitor. Touches toward the edge may generate clicks on adjacent monitors.
enumVrtlBoundsClipped=2: Enables virtual desktop. Screen bounds are enabled for each monitor. Touches on the screen will always generate clicks on the associated monitor. A touch outside the bounding rectangle will cause the cursor to move to a point along the boundary that is nearest to the point of touch.
enumVrtlBoundsFreeze=3: Enables virtual desktop. Screen bounds are enabled for each monitor. Touches on the screen will always generate clicks on the associated monitor. Touches outside the bounding rectangle will not be sent to the system.

### Constants: GETPOINTS_CODE

Valid GETPOINTS_CODE for the touchscreen.

> > > typedef enum _GETPOINTS_CODE // the blocked call returns data depending on this flag

> > > {

> > > > NoRequest = 0,

> > > > ReturnImmediately,

> > > > ReturnOnTouch,

> > > > ReturnOnUntouch,

> > > > ReturnOnNextValidTouch,

> > > }GETPOINTS_CODE ;

Values

NoRequest: No response

ReturnImmediately: Response immediately when touch is detected regardless of the touch validity

ReturnOnTouch: Response only on touch

ReturnOnUntouch: Response only on untouch

ReturnOnNextValidTouch: Response back all valid touch (On-touch, Un-touch and streaming)

### Constants: GETPOINTS_TRANSLATION

Valid GETPOINTS_TRANSLATION for the touchscreen.

> > > typedef enum _GETPOINTS_TRANSLATION

> > > {

> > > > Raw =1,

> > > > Translated,

> > > > ControllerDirect

> > > }GETPOINTS_TRANSLATION ;

Values

Raw: Raw data

Translated: Translated data

ControllerDirect: Data directly out from the controller

### Constants: TOUCH_STATUS

Valid mode for the touchscreen.

> > > typedef enum tagTouchStatus // the blocked call returns data depending on this flag

> > > {

> > > > InitialTouch = 1,

> > > > StreamTouch = 2,

> > > > UnTouch = 4

> > > } TOUCH_STATUS ;

Values

InitialTouch: The touch data was returned on the initial touch.

StreamTouch: The touch data was returned on a stream touch.

UnTouch: The touch data was returned on an untouch.

## MM_ERROR_CODE: Returned from Interface DLL

> > > typedef enum _MM_ERROR_CODE // Error returns in the header

> > > {

> > > > MMErrorSuccess=0,

> > > > MMErrorInvalidCommand,

> > > > MMErrorVersionLock,

> > > > MMErrorBufferSize,

> > > > MMErrorTouchDeviceNotWorking,

> > > > MMErrorNotImplemented,

> > > > MMErrorDeviceBusy,

> > > > MMErrorNoActionTaken

> > > } MM_ERROR_CODE;

> # Contacting Elo

Elo Touch Solutions has technical support offices around the world. We can be reached by telephone, e-mail or fax, and you can find an office that is open and staffed with personnel to assist you with questions or problems pertaining to our Elo products.

Consult the list below for the office which can best serve you.

> ## Amerias

> ### North America

> U.S.A | Tel: 1-800-557-1458 (toll free)
> | Fax: 865-694-1731
> | Online form: request technical support

> ### Latin America

> English-speaking customers | Tel: 1-800-557-1458 (toll free)
> | Fax: 865-694-1731
> | Online form: request technical support
> Portuguese-speaking customers | Tel: (55 11) 3611-1311, ext 249 or 144
> | Fax: (55 11) 3611-4365
> | E-mail: elotechbr@elotouch.com
> Spanish-speaking customers | Tel: 54 11 - 47332238
> | Fax: 54 11 - 47332245
> | Online form: request technical support

> ## Asia-Pacific

> Japan | Tel: (81) (0) 45-478-2166
> | Fax: (81) (0) 45-478-2181
> | E-mail: info@tps.co.jp
> Taiwan | Tel: 886 2 26629788, ext 416
> | Fax: 886 2 26642725
> | E-mail: eric.chang@tycoelectronics.com

> ## Europe (including Africa/Middle East)

> Africa | Tel: +32 (0)16 35 19 01
> Belgium | Fax: +32 (0)16 35 21 01
> Greece | E-mail: elotecheu@elotouch.com
> Italy |
> Luxemburg |
> Netherlands |
> Portugal |
> Spain |

> Austria | Tel: +49 (0)89 60 822 193
> Czech Republic | Fax: +49 (0)89 60 822 180
> Germany | E-mail: elotecheu@elotouch.com
> Hungary |
> Kroatia |
> Poland |
> Romania |
> Russia |
> Slovakia |
> Slovenia |
> Switzerland |

> Denmark | Tel: +44 (0)1793 57 33 46
> Finland | Fax: +44 (0)1793 57 33 45
> Iceland | E-mail: elotecheu@elotouch.com
> Israel |
> Ireland |
> Norway |
> Sweden |
> United Kingdom |
> France | Tel: 0825 825 497 (toll free)
> | E-mail: elotecheu@elotouch.com